﻿using QuanLyKhachSan.Validation;
using DataAccess;
using System;
using System.Linq;

namespace QuanLyKhachSan
{
    public class NhanVienManager:IValidator<NhanVien>, ILenhThucThi<NhanVien>
    {
        public ActionResultAsList<NhomTaiKhoan> LayNhomTk()
        {
            var action = new ActionResultAsList<NhomTaiKhoan>();
            var ql = new QLKhachSanContext();
            try
                {
                    var query = from nv in ql.NhomTaiKhoans
                                select nv;

                    action.Result = query.ToList();

                    if (action.Result.Count == 0)
                        action.Exceptions.Add(new Exception("Dữ liệu nhóm tài khoản rỗng"));
                }
                catch (Exception e)
                {
                    action.Exceptions.Add(e);
                }    
            return action;
        }

        public ActionResultAsList<TaiKhoan> LayTk()
        {
            var action = new ActionResultAsList<TaiKhoan>();
            var ql = new QLKhachSanContext();
                try
                {
                    var query = from nv in ql.TaiKhoans
                                where nv.TrangThai != "Đã xóa" || nv.TrangThai == null
                                select nv;

                    action.Result = query.ToList();

                    if (action.Result.Count == 0)
                        action.Exceptions.Add(new Exception("Dữ liệu tài khoản rỗng"));
                }
                catch (Exception e)
                {
                    action.Exceptions.Add(e);
                }
            return action;
        }

        public ActionResult Them(NhanVien obj)
        {
            var action = new ActionResult();

            using(var ql = new QLKhachSanContext())
            {
                try
                {
                    ql.NhanViens.Add(obj);
                    ql.SaveChanges();
                }
                catch (Exception e)
                {
                    action.Exceptions.Add(e);
                }
            }

            return action;
        }

        public ActionResult Xoa(string ma)
        {
            var action = new ActionResult();

            using(var ql = new QLKhachSanContext())
            {
                var query = (from nv in ql.NhanViens
                            where nv.MaNV == int.Parse(ma)
                            select nv).FirstOrDefault();
                try
                {
                    if (query == null)
                    {
                        action.Exceptions.Add(new Exception("Không tồn tại nhân viên có mã " + ma));
                    }
                    else
                    {
                        query.TrangThai = "Đã xóa";
                        ql.SaveChanges();
                    }
                }
                catch (Exception e)
                {
                    action.Exceptions.Add(e);   
                }
                return action;
            }

            
        }

        public ActionResult Xoa(NhanVien ma)
        {
            var action = new ActionResult();

            using(var ql = new QLKhachSanContext())
            {
                var query = (from nv in ql.NhanViens
                             where nv.MaNV == ma.MaNV
                             select nv).FirstOrDefault();
                try
                {
                    if (query == null)
                    {
                        action.Exceptions.Add(new Exception("Không tồn tại nhân viên có mã " + ma.MaNV));
                    }
                    else
                    {
                        query.TrangThai = "Đã xóa";
                        ql.SaveChanges();
                    }
                }
                catch (Exception e)
                {
                    action.Exceptions.Add(e);
                }
            }

            return action;
        }

        public ActionResult CapNhat(NhanVien obj)
        {
            var action = new ActionResult();

            using(var ql = new QLKhachSanContext())
            {
                var query = (from nv in ql.NhanViens
                             where nv.MaNV == obj.MaNV
                             select nv).FirstOrDefault();
                try
                {
                    if (query == null)
                    {
                        action.Exceptions.Add(new Exception("Không tồn tại nhân viên có mã " + obj.MaNV));
                    }
                    else
                    {
                        query.TenNhanVien = obj.TenNhanVien;
                        query.DiaChi = obj.DiaChi;
                        query.MaCV = obj.MaCV;
                        query.HeSoLuong = obj.HeSoLuong;
                        query.SCMND = obj.SCMND;
                        query.NgayLamViec = obj.NgayLamViec;
                        query.TrangThai = obj.TrangThai;
                        ql.SaveChanges();
                    }
                }
                catch (Exception e)
                {
                    action.Exceptions.Add(e);
                }
                return action;
            }

            
        }

        public ActionResultAsList<NhanVien> LayDanhSach()
        {
            var action = new ActionResultAsList<NhanVien>();
            var ql = new QLKhachSanContext();
            try
            {
                    var query = from nv in ql.NhanViens
                                where nv.TrangThai != "Đã xóa" || nv.TrangThai == null
                                select nv;
                action.Result = query.ToList();

                if (action.Result.Count == 0)
                    action.Exceptions.Add(new Exception("Dữ liệu nhân viên rỗng"));
            }
            catch (Exception e)
            {
                action.Exceptions.Add(e);
            }
            return action;
        }

        public ValidateResult Validate(NhanVien obj)
        {
            var result = new ValidateResult();

            if (string.IsNullOrEmpty(obj.TenNhanVien))
                result.Message.Add("Tên nhân viên chưa có");

            if (string.IsNullOrEmpty(obj.DiaChi))
                result.Message.Add("Địa chỉ nhân viên chưa có");

            if (string.IsNullOrEmpty(obj.SCMND))
                result.Message.Add("Số CMND nhân viên chưa có");

            if (obj.HeSoLuong <= 0)
                result.Message.Add("Hệ số lương nhân viên chưa có, nhỏ hơn hoặc bằng 0");

            if (obj.NgayLamViec > DateTime.Now)
                result.Message.Add("Ngày làm việc lớn hon ngày hiện hành");

            return result;
        }
        public ActionResult CapNhat_NOCHANGE(NhanVien obj)
        {
            var action = new ActionResult();

            using (var ql = new QLKhachSanContext())
            {
                var query = (from nv in ql.NhanViens
                             where nv.MaNV == obj.MaNV
                             select nv).FirstOrDefault();
                try
                {
                    if (query == null)
                    {
                        action.Exceptions.Add(new Exception("Không tồn tại nhân viên có mã " + obj.MaNV));
                    }
                    else
                    {
                        query.TenNhanVien = obj.TenNhanVien;
                        query.DiaChi = obj.DiaChi;
                        query.MaCV = obj.MaCV;
                        query.HeSoLuong = obj.HeSoLuong;
                        query.SCMND = obj.SCMND;
                        query.NgayLamViec = obj.NgayLamViec;
                        query.TrangThai = obj.TrangThai;
                    }
                }
                catch (Exception e)
                {
                    action.Exceptions.Add(e);
                }
                return action;
            }


        }
    }
}
